// ============================================================================
// 测试增量爬取功能的示例脚本
// ============================================================================

import { SearchTaskParams, ScrapeTask } from './shared/types'

/**
 * 创建增量爬取任务的示例
 */
function createIncrementalSearchTask(): ScrapeTask {
  const incrementalSearchParams: SearchTaskParams = {
    keyword: '人工智能',
    searchType: 'comprehensive',
    
    // 增量爬取选项
    enableIncremental: true,      // 启用增量爬取
    crawlHistory: true,          // 爬取历史数据
    maxPagesPerType: 5,          // 每种类型（最新/历史）的最大页数
    timeWindowEnabled: true,      // 启用时间窗口管理
    
    // 基础选项
    count: 100,
    includeComments: false,
    includeReposts: false
  }

  const incrementalTask: ScrapeTask = {
    id: 'test-incremental-task',
    type: 'search',
    params: incrementalSearchParams,
    status: 'pending',
    accountId: '1',
    createdAt: new Date(),
    priority: 1,
    retryCount: 0,
    maxRetries: 3,
    tags: ['incremental', 'test']
  }

  return incrementalTask
}

/**
 * 创建传统爬取任务的示例（作为对比）
 */
function createTraditionalSearchTask(): ScrapeTask {
  const traditionalSearchParams: SearchTaskParams = {
    keyword: '人工智能',
    searchType: 'comprehensive',
    
    // 禁用增量爬取选项
    enableIncremental: false,     // 禁用增量爬取
    timeWindowEnabled: false,     // 禁用时间窗口管理
    
    // 基础选项
    count: 100,
    includeComments: false,
    includeReposts: false
  }

  const traditionalTask: ScrapeTask = {
    id: 'test-traditional-task',
    type: 'search',
    params: traditionalSearchParams,
    status: 'pending',
    accountId: '1',
    createdAt: new Date(),
    priority: 1,
    retryCount: 0,
    maxRetries: 3,
    tags: ['traditional', 'test']
  }

  return traditionalTask
}

/**
 * 测试用例说明
 */
function demonstrateIncrementalFeatures() {
  console.log('=== 增量爬取功能测试 ===\n')

  // 1. 创建增量爬取任务
  const incrementalTask = createIncrementalSearchTask()
  console.log('1. 增量爬取任务配置：')
  console.log('   - 关键词:', (incrementalTask.params as SearchTaskParams).keyword)
  console.log('   - 启用增量爬取:', (incrementalTask.params as SearchTaskParams).enableIncremental)
  console.log('   - 启用时间窗口:', (incrementalTask.params as SearchTaskParams).timeWindowEnabled)
  console.log('   - 爬取历史数据:', (incrementalTask.params as SearchTaskParams).crawlHistory)
  console.log('   - 最大页数/类型:', (incrementalTask.params as SearchTaskParams).maxPagesPerType)
  console.log()

  // 2. 创建传统爬取任务作为对比
  const traditionalTask = createTraditionalSearchTask()
  console.log('2. 传统爬取任务配置（对比）：')
  console.log('   - 关键词:', (traditionalTask.params as SearchTaskParams).keyword)
  console.log('   - 启用增量爬取:', (traditionalTask.params as SearchTaskParams).enableIncremental)
  console.log('   - 启用时间窗口:', (traditionalTask.params as SearchTaskParams).timeWindowEnabled)
  console.log()

  // 3. 增量爬取的工作流程说明
  console.log('3. 增量爬取工作流程：')
  console.log('   第一步: 获取关键字的时间窗口信息')
  console.log('   第二步: 爬取最新帖子（每次都执行）')
  console.log('   第三步: 爬取历史帖子（按需执行）')
  console.log('   第四步: 去重处理（内存 + 数据库）')
  console.log('   第五步: 批量保存到数据库和MQ')
  console.log('   第六步: 更新时间窗口状态')
  console.log()

  // 4. 增量爬取的优势
  console.log('4. 增量爬取相比传统爬取的优势：')
  console.log('   ✓ 智能时间窗口管理，避免重复爬取')
  console.log('   ✓ 双向爬取策略（最新 + 历史）')
  console.log('   ✓ 更高效的去重机制')
  console.log('   ✓ 更好的资源利用和性能')
  console.log('   ✓ 支持渐进式数据收集')
  console.log()

  // 5. 配置选项说明
  console.log('5. 新增配置选项说明：')
  console.log('   - enableIncremental: 是否启用增量爬取（默认 true）')
  console.log('   - crawlHistory: 是否爬取历史数据（默认 true）')
  console.log('   - maxPagesPerType: 每种类型的最大页数（默认 10）')
  console.log('   - timeWindowEnabled: 是否使用时间窗口管理（默认 true）')
  console.log()

  return { incrementalTask, traditionalTask }
}

/**
 * 模拟任务执行过程
 */
function simulateTaskExecution() {
  console.log('=== 模拟任务执行过程 ===\n')

  const steps = [
    { stage: '初始化搜索任务', progress: 0 },
    { stage: '获取关键字时间窗口信息', progress: 10 },
    { stage: '爬取最新帖子', progress: 30 },
    { stage: '爬取历史帖子', progress: 50 },
    { stage: '去重处理', progress: 70 },
    { stage: '批量保存数据', progress: 85 },
    { stage: '数据处理完成', progress: 90 },
    { stage: '任务完成', progress: 100 }
  ]

  console.log('任务执行步骤：')
  steps.forEach((step, index) => {
    console.log(`   ${index + 1}. [${step.progress}%] ${step.stage}`)
  })
  console.log()
}

// 执行测试演示
if (require.main === module) {
  console.clear()
  console.log('🚀 增量爬取功能测试演示\n')
  
  const { incrementalTask, traditionalTask } = demonstrateIncrementalFeatures()
  simulateTaskExecution()
  
  console.log('✅ 增量爬取功能已成功集成到 executeSearchTask 方法中')
  console.log('📖 使用方式：创建搜索任务时，设置相应的增量爬取参数即可')
  console.log('🔧 可以通过参数灵活控制是否启用增量模式')
}

export {
  createIncrementalSearchTask,
  createTraditionalSearchTask,
  demonstrateIncrementalFeatures,
  simulateTaskExecution
}
